#ifndef FECORE_H
#define FECORE_H
#include "fecore_global.h"
#include <QObject>

class FePlugin;
class FeController;
class FeActualDataService;
class FeActualDataProvider;
class FeWidgetFactory;

class FECORE_EXPORT FeCore : public QObject {
	Q_OBJECT
protected:
	FeCore(QObject *parent) : QObject(parent) {};
	virtual ~FeCore() {};

public:
	static FeCore *instance();
	
	// services
	virtual FeActualDataService *actualDataService() const = 0;

	// plugin self-registration interface
	virtual void registerController(FeController *controller) = 0;
	virtual void registerWidgetFactory(FeWidgetFactory *factory) = 0;
	virtual void registerDataProvider(FeActualDataProvider *provider) = 0;

private:
	Q_DISABLE_COPY(FeCore);
};

#endif // FECORE_H